// https://leetcode.cn/problems/reverse-string-ii/
// Created by ade on 2022/8/9.
// 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
//
//如果剩余字符少于 k 个，则将剩余字符全部反转。
//如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

class Solution {
public:
    string reverseStr(string s, int k) {
        int len = s.size();
        if (k > len) {
            reverse(s.begin(), s.end());
            return s;
        }
        int num = len / k;
        int i = 0;
        for (; i < num; i = i + 2) {
            reverse(s.begin() + i * k, s.begin() + (i + 1) * k);
        }
        if(len - i * k < k){
            reverse(s.begin() + i * k, s.end());
        }
        return s;
    }
};

int main() {
    string s = "hyzqyljrnigxvdtneasepfahmtyhlohwxmkqcdfehybknvdmfrfvtbsovjbdhevlfxpdaovjgunjqlimjkfnqcqnajmebeddqsgl";
    //         "fdcqkmxwholhytmhafpesaentdvxginrjlyqzyhehybknvdmfrfvtbsovjbdhevlfxpdaovjgunjqlimjkfnqcqnajmebeddqsgl" 我输出的
    //         "fdcqkmxwholhytmhafpesaentdvxginrjlyqzyhehybknvdmfrfvtbsovjbdhevlfxpdaovjgunjqllgsqddebemjanqcqnfkjmi" 正确的
    int k = 39;
    Solution so;
    cout << so.reverseStr(s, k);
    return 0;
}